home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 626-637 / disk_629 / rexxrmf / rexxrmf.lzh / test.rexx < prev    next >
OS/2 REXX Batch file  |  1992-03-14  |  7KB  |  204 lines

  1.  
  2. /* This example illustrates how to use 'low level' AVL-tree functions */
  3. /* for simple indexing, nothing meaningful is done here.              */
  4.  
  5. /* DO NOT inter-mix the add_key(), delete_key() functions with the 
  6.    DELETE_RMF_RECORD, READ_RMF_RECORD and WRITE_RMF_RECORD functions.
  7.    You are just asking for trouble if you do.  
  8.    
  9.    'low level' functions which simply return information, but do not 
  10.    modify the tree, can safely be inter-mixed with the ...RMF_RECORD
  11.    functions.
  12.  
  13.    Though nothing useful is done in this example, remember that the
  14.    'low level' functions do not perform any I/O to the data file.
  15.    Therefore if you are just looking for the existence of a key,
  16.    it is much faster to simply do a "find_key()", instead of a 
  17.    READ_RMF_RECORD().
  18. */
  19.  
  20.  
  21. x = addlib("RexxRMF.library",0,-30,0)
  22. x = addlib("rexxsupport.library",0,-30,0)
  23.  
  24.  
  25. ix = open_rmf()  /* no data file or index file will be created                */
  26.                  /* simply using search/sort capabilities of AVL              */
  27.                  /* cannot save the index, cuz we did not open it with a name */
  28.  
  29. if ix = '0000 0000'x then exit
  30.  
  31. p = showlist('P')             /* build list of names, message port names */
  32.  
  33. do forever                    /* insert names from showlist() into tree */
  34.                               /* insertion occurs such that the names   */
  35.                               /* are sorted in alphabetical order       */
  36.  
  37.    if p = '' then leave       /* when list is exhausted leave */
  38.  
  39.    parse var p aportname p    /* parse out a name             */
  40.    
  41.    treenode = add_key(ix,0,aportname,0) /* add portname to the tree */
  42.  
  43. end
  44.  
  45. /* ---------------------------------- */
  46. /* Now print the contents of the tree */
  47. /* ---------------------------------- */
  48.  
  49. i = 1
  50. do forever
  51.  
  52.    treenode = find_pos(ix,0,i)  /* find by position (ie. in sorted order) */
  53.  
  54.    if treenode = '0000 0000'x then leave
  55.  
  56.    say " Node " i '=' key_value(treenode)  /* print value of key */
  57.  
  58.    i = i + 1
  59.  
  60. end
  61.  
  62.  
  63. /* ---------------------------------- */
  64. /* adding some more keys into tree    */
  65. /* ---------------------------------- */
  66.  
  67. do i = 1 to 8
  68.  
  69.    z = add_key(ix,0,"Ron_nie",0)  /* add a key into the tree */
  70.                                   /* create multiple occurences */
  71. end
  72.  
  73. z = add_key(ix,0,"RHONDA",0)      /* create multiple occurences */
  74. z = add_key(ix,0,"RHONDA",0)
  75. z = add_key(ix,0,"RHONDA",0)
  76.  
  77. z = add_key(ix,0,"RONNIE",0)      /* create multiple occurences */
  78. z = add_key(ix,0,"RONNIE",0)
  79. z = add_key(ix,0,"RONNIE",0)
  80.  
  81.  
  82. /* ---------------------------------- */
  83.  
  84. say ""
  85. say " Looking for RHONDA ... "
  86. akey = find_key(ix,0,"RHONDA",1)       /* find first occurence of RHONDA  */
  87.  
  88. do while akey ~= '0000 0000'x          /* while akey not = null           */
  89.  
  90.    say "Found KEY:" key_value(akey)    /* value of the key                */
  91.    say "Occurence:" key_occur(akey)    /* which occurence is it           */
  92.    say "Position :" node_pos(akey)     /* relative position, sorted order */
  93.  
  94.    /* find_next() finds the NEXT node with same key value that was  */
  95.    /* specified in the most recent find_key() call.                 */
  96.  
  97.    akey = find_next(ix,0)              /* this find_next() will find the  */
  98.                                        /* next occurence of RHONDA        */
  99.                                        /* when no more occurences, then   */ 
  100.                                        /* akey will be equal to null      */
  101.  
  102.                                        /* akey = null will terminate the  */
  103.                                        /* loop                            */
  104.  
  105. end
  106. say " Done Looking for RHONDA."        /* should be 3 occurences of RHONDA */
  107. say ""
  108. say ""
  109.  
  110.  
  111.  
  112. /* -------------------------------------------------- */
  113.  
  114. /* the difference between locate_key() and find_key() */
  115.  
  116. /* find_key() wants an exact match, both on the key   */
  117. /* value and the occurence.                           */
  118.  
  119. /* locate_key() will matche partial key strings       */
  120.  
  121. /* -------------------------------------------------- */
  122.  
  123.  
  124. say ""
  125. say " Looking for anything beginning with R ... "
  126. string = "R"
  127.  
  128. akey = locate_key(ix,0,string,1)  /* will locate any key beginning with "R" */
  129.  
  130. do until akey = '0000 0000'x
  131.    if akey ~= '0000 0000'x then
  132.       say "LOCATED KEY" key_value(akey) "occurence" key_occur(akey) "position" node_pos(akey)
  133.    akey = locate_next(ix,0)
  134. end
  135. say " Done Looking for things beginning with R. "
  136. say ""
  137. say ""
  138.  
  139.  
  140.  
  141. /* ---------------------------------- */
  142. /* gonna delete 2 of RHONDA's keys    */
  143. /* ---------------------------------- */
  144.  
  145. z = delete_key(ix,0,"RHONDA",1)  /* delete first occurence of RHONDA  */
  146.                                  /* will cause mulitples occur number */
  147.                                  /* to be adjusted accordingly        */
  148.                                  
  149. z = delete_key(ix,0,"RHONDA",1)  /* what was occurence #2 is now occur */
  150.                                  /* occur #1                           */
  151.  
  152.  
  153. /* ---------------------------------------------------- */
  154. /* should only be 1 occurence of RHONDA in the tree now */
  155. /* ---------------------------------------------------- */
  156.  
  157. say ""
  158. say " Looking for RHONDA ... (again) "
  159. akey = find_key(ix,0,"RHONDA",1)       /* find first occurence of RHONDA  */
  160.  
  161. do while akey ~= '0000 0000'x          /* while akey not = null           */
  162.  
  163.    say "Found KEY:" key_value(akey)    /* value of the key                */
  164.    say "Occurence:" key_occur(akey)    /* which occurence is it           */
  165.    say "Position :" node_pos(akey)     /* relative position, sorted order */
  166.  
  167.    /* find_next() finds the NEXT node with same key value that was  */
  168.    /* specified in the most recent find_key() call.                 */
  169.  
  170.    akey = find_next(ix,0)              /* this find_next() will find the  */
  171.                                        /* next occurence of RHONDA        */
  172.                                        /* when no more occurences, then   */ 
  173.                                        /* akey will be equal to null      */
  174.  
  175.                                        /* akey = null will terminate the  */
  176.                                        /* loop                            */
  177.  
  178. end
  179. say " Done Looking for RHONDA."        /* should be 1 occurence  of RHONDA */
  180. say ""
  181. say ""
  182.  
  183.  
  184.  
  185. /* ---------------------------------- */
  186. /* print the entire tree              */
  187. /* ---------------------------------- */
  188.  
  189. i = 1
  190. do forever
  191.  
  192.    treenode = find_pos(ix,0,i)  /* find by position (ie. in sorted order) */
  193.    
  194.    if treenode = '0000 0000'x then leave
  195.    say " Node " i '=' key_value(treenode)  /* print value of key */
  196.    
  197.    i = i + 1
  198.  
  199. end
  200.  
  201. x = close_rmf(ix,0)      /* close index, releasing mem used       */
  202.  
  203. exit
  204.